/**
 * 设计方案服务层
 * 统一管理设计方案的获取，方便将来接入 AI API
 */

import { DesignSchema } from '../types';
import { getMockDesigns } from '../mockDesigns';

/**
 * 设计方案请求参数
 */
export interface DesignRequest {
  prompt: string; // 用户输入的需求描述
  count?: number; // 期望返回的方案数量，默认 4
  style?: 'modern' | 'classic' | 'minimal'; // 设计风格（可选）
  layout?: 'single' | 'double' | 'grid'; // 布局类型（可选）
}

/**
 * 设计方案响应
 */
export interface DesignResponse {
  success: boolean;
  designs: DesignSchema[];
  message?: string;
  error?: string;
}

/**
 * 设计方案服务类
 */
class DesignService {
  private useAI: boolean = false; // 是否使用 AI API
  private apiEndpoint: string = ''; // AI API 端点

  /**
   * 配置服务
   */
  configure(options: { useAI?: boolean; apiEndpoint?: string }) {
    if (options.useAI !== undefined) {
      this.useAI = options.useAI;
    }
    if (options.apiEndpoint) {
      this.apiEndpoint = options.apiEndpoint;
    }
  }

  /**
   * 获取设计方案
   * 根据配置决定使用 AI API 还是 Mock 数据
   */
  async getDesigns(request: DesignRequest): Promise<DesignResponse> {
    console.log('🎨 获取设计方案:', request);

    try {
      if (this.useAI && this.apiEndpoint) {
        // 使用 AI API 获取设计方案
        return await this.getAIDesigns(request);
      } else {
        // 使用 Mock 数据
        return this.getMockDesignsResponse(request);
      }
    } catch (error) {
      console.error('❌ 获取设计方案失败:', error);
      return {
        success: false,
        designs: [],
        error: error instanceof Error ? error.message : '未知错误',
      };
    }
  }

  /**
   * 从 AI API 获取设计方案
   * TODO: 实现真实的 AI API 调用
   */
  private async getAIDesigns(request: DesignRequest): Promise<DesignResponse> {
    console.log('🤖 调用 AI API:', this.apiEndpoint);

    // TODO: 实现真实的 AI API 调用
    // 示例代码：
    // const response = await fetch(this.apiEndpoint, {
    //   method: 'POST',
    //   headers: { 'Content-Type': 'application/json' },
    //   body: JSON.stringify(request),
    // });
    // const data = await response.json();
    // return data;

    // 临时：返回 Mock 数据
    return new Promise((resolve) => {
      setTimeout(() => {
        resolve(this.getMockDesignsResponse(request));
      }, 1000);
    });
  }

  /**
   * 获取 Mock 设计方案
   */
  private getMockDesignsResponse(request: DesignRequest): DesignResponse {
    console.log('📦 使用 Mock 数据');

    const allDesigns = getMockDesigns();
    const count = request.count || 4;

    // 根据请求参数过滤或选择设计方案
    const selectedDesigns = allDesigns.slice(0, count);

    return {
      success: true,
      designs: selectedDesigns,
      message: `已生成 ${selectedDesigns.length} 个设计方案`,
    };
  }

  /**
   * 添加自定义设计方案
   * 可用于动态添加用户保存的设计方案
   */
  async addCustomDesign(design: DesignSchema): Promise<boolean> {
    // TODO: 实现保存到后端或本地存储
    console.log('💾 添加自定义设计方案:', design.title);
    return true;
  }

  /**
   * 验证设计方案的有效性
   */
  validateDesign(design: DesignSchema): boolean {
    if (!design.id || !design.title || !design.schema) {
      return false;
    }
    if (!design.schema.componentName) {
      return false;
    }
    return true;
  }
}

// 导出单例实例
export const designService = new DesignService();

// 导出类（用于测试或创建多个实例）
export default DesignService;
